package lambdasinaction.chap9.my;

/**
 * 解决冲突问题的三条规则
 * 如果一个类相同的函数签名从多个地方（比如另一个类或接口）继承了方法，通过三条规则可以进行判断。
 * 1.类中的方法优先级最高。类或父类中声明的方法的优先级高于任何声明为默认方法的优先级。
 * 2.如果无法依据第一条进行判断，那么子接口的优先级更高：函数签名相同时，优先选择拥有最具体实现的默认方法的接口，即如果 B 继承了 A，那么 B 就比 A 更加具体。
 * 3.最后，如果还是无法判断，继承了多个接口的类必须通过显式覆盖和调用期望的方法，显式地选择使用哪一个默认方法的实现。
 *
 * @author Fish
 * @since 0.0.1 2018/8/10 16:13
 */
public class MyMostSpecific {

  public interface A {

    default void hello() {
      System.out.println("Hello from A");
    }
  }

  public interface B extends A {

    default void hello() {
      System.out.println("Hello from B");
    }

  }

  public static class C implements B, A {


  }

  public static void main(String[] args) {
    new C().hello();
  }

}
